/*!jPlayerPlaylist for jPlayer 2.9.2 ~ (c) 2009-2014 Happyworm Ltd ~ MIT License*/
! function (a, b) {
  jPlayerPlaylist = function (b, c, d) {
    var e = this;
    this.current = 0, this.loop = !1, this.shuffled = !1, this.removing = !1, this.cssSelector = a.extend({}, this._cssSelector, b), this.options = a.extend(!0, {
      keyBindings: {
        next: {
          key: 221,
          fn: function () {
            e.next()
          }
        },
        previous: {
          key: 219,
          fn: function () {
            e.previous()
          }
        },
        shuffle: {
          key: 83,
          fn: function () {
            e.shuffle()
          }
        }
      },
      stateClass: {
        shuffled: "jp-state-shuffled"
      }
    }, this._options, d), this.playlist = [], this.original = [], this._initPlaylist(c), this.cssSelector.details = this.cssSelector.cssSelectorAncestor + " .jp-details", this.cssSelector.playlist = this.cssSelector.cssSelectorAncestor + " .jp-playlist", this.cssSelector.next = this.cssSelector.cssSelectorAncestor + " .jp-next", this.cssSelector.previous = this.cssSelector.cssSelectorAncestor + " .jp-previous", this.cssSelector.shuffle = this.cssSelector.cssSelectorAncestor + " .jp-shuffle", this.cssSelector.shuffleOff = this.cssSelector.cssSelectorAncestor + " .jp-shuffle-off", this.options.cssSelectorAncestor = this.cssSelector.cssSelectorAncestor, this.options.repeat = function (a) {
      e.loop = a.jPlayer.options.loop
    }, a(this.cssSelector.jPlayer).bind(a.jPlayer.event.ready, function () {
      e._init()
    }), a(this.cssSelector.jPlayer).bind(a.jPlayer.event.ended, function () {
      e.next()
    }), a(this.cssSelector.jPlayer).bind(a.jPlayer.event.play, function () {
      a(this).jPlayer("pauseOthers")
    }), a(this.cssSelector.jPlayer).bind(a.jPlayer.event.resize, function (b) {
      b.jPlayer.options.fullScreen ? a(e.cssSelector.details).show() : a(e.cssSelector.details).hide()
    }), a(this.cssSelector.previous).click(function (a) {
      a.preventDefault(), e.previous(), e.blur(this)
    }), a(this.cssSelector.next).click(function (a) {
      a.preventDefault(), e.next(), e.blur(this)
    }), a(this.cssSelector.shuffle).click(function (b) {
      b.preventDefault(), e.shuffle(e.shuffled && a(e.cssSelector.jPlayer).jPlayer("option", "useStateClassSkin") ? !1 : !0), e.blur(this)
    }), a(this.cssSelector.shuffleOff).click(function (a) {
      a.preventDefault(), e.shuffle(!1), e.blur(this)
    }).hide(), this.options.fullScreen || a(this.cssSelector.details).hide(), a(this.cssSelector.playlist + " ul").empty(), this._createItemHandlers(), a(this.cssSelector.jPlayer).jPlayer(this.options)
  }, jPlayerPlaylist.prototype = {
    _cssSelector: {
      jPlayer: "#jquery_jplayer_1",
      cssSelectorAncestor: "#jp_container_1"
    },
    _options: {
      playlistOptions: {
        autoPlay: !1,
        loopOnPrevious: !1,
        shuffleOnLoop: !0,
        enableRemoveControls: !1,
        displayTime: "slow",
        addTime: "fast",
        removeTime: "fast",
        shuffleTime: "slow",
        itemClass: "jp-playlist-item",
        freeGroupClass: "jp-free-media",
        freeItemClass: "jp-playlist-item-free",
        removeItemClass: "jp-playlist-item-remove"
      }
    },
    option: function (a, c) {
      if (c === b) return this.options.playlistOptions[a];
      switch (this.options.playlistOptions[a] = c, a) {
        case "enableRemoveControls":
          this._updateControls();
          break;
        case "itemClass":
        case "freeGroupClass":
        case "freeItemClass":
        case "removeItemClass":
          this._refresh(!0), this._createItemHandlers()
      }
      return this
    },
    _init: function () {
      var a = this;
      this._refresh(function () {
        a.options.playlistOptions.autoPlay ? a.play(a.current) : a.select(a.current)
      })
    },
    _initPlaylist: function (b) {
      this.current = 0, this.shuffled = !1, this.removing = !1, this.original = a.extend(!0, [], b), this._originalPlaylist()
    },
    _originalPlaylist: function () {
      var b = this;
      this.playlist = [], a.each(this.original, function (a) {
        b.playlist[a] = b.original[a]
      })
    },
    _refresh: function (b) {
      var c = this;
      if (b && !a.isFunction(b)) a(this.cssSelector.playlist + " ul").empty(), a.each(this.playlist, function (b) {
        a(c.cssSelector.playlist + " ul").append(c._createListItem(c.playlist[b]))
      }), this._updateControls();
      else {
        var d = a(this.cssSelector.playlist + " ul").children().length ? this.options.playlistOptions.displayTime : 0;
        a(this.cssSelector.playlist + " ul").slideUp(d, function () {
          var d = a(this);
          a(this).empty(), a.each(c.playlist, function (a) {
            d.append(c._createListItem(c.playlist[a]))
          }), c._updateControls(), a.isFunction(b) && b(), c.playlist.length ? a(this).slideDown(c.options.playlistOptions.displayTime) : a(this).show()
        })
      }
    },
    _createListItem: function (b) {
      var c = this,
        d = "<li><div>";
      if (d += "<a href='javascript:;' class='" + this.options.playlistOptions.removeItemClass + "'>&times;</a>", b.free) {
        var e = !0;
        d += "<span class='" + this.options.playlistOptions.freeGroupClass + "'>(", a.each(b, function (b, f) {
          a.jPlayer.prototype.format[b] && (e ? e = !1 : d += " | ", d += "<a class='" + c.options.playlistOptions.freeItemClass + "' href='" + f + "' tabindex='-1'>" + b + "</a>")
        }), d += ")</span>"
      }
      return d += "<a href='javascript:;' class='" + this.options.playlistOptions.itemClass + "' tabindex='0'>" + b.title + (b.artist ? " <span class='jp-artist'> - " + b.artist + "</span>" : "") + "</a>", d += "</div></li>"
    },
    _createItemHandlers: function () {
      var b = this;
      a(this.cssSelector.playlist).off("click", "a." + this.options.playlistOptions.itemClass).on("click", "a." + this.options.playlistOptions.itemClass, function (c) {
        c.preventDefault();
        var d = a(this).parent().parent().index();
        b.current !== d ? b.play(d) : a(b.cssSelector.jPlayer).jPlayer("play"), b.blur(this)
      }), a(this.cssSelector.playlist).off("click", "a." + this.options.playlistOptions.freeItemClass).on("click", "a." + this.options.playlistOptions.freeItemClass, function (c) {
        c.preventDefault(), a(this).parent().parent().find("." + b.options.playlistOptions.itemClass).click(), b.blur(this)
      }), a(this.cssSelector.playlist).off("click", "a." + this.options.playlistOptions.removeItemClass).on("click", "a." + this.options.playlistOptions.removeItemClass, function (c) {
        c.preventDefault();
        var d = a(this).parent().parent().index();
        b.remove(d), b.blur(this)
      })
    },
    _updateControls: function () {
      this.options.playlistOptions.enableRemoveControls ? a(this.cssSelector.playlist + " ." + this.options.playlistOptions.removeItemClass).show() : a(this.cssSelector.playlist + " ." + this.options.playlistOptions.removeItemClass).hide(), this.shuffled ? a(this.cssSelector.jPlayer).jPlayer("addStateClass", "shuffled") : a(this.cssSelector.jPlayer).jPlayer("removeStateClass", "shuffled"), a(this.cssSelector.shuffle).length && a(this.cssSelector.shuffleOff).length && (this.shuffled ? (a(this.cssSelector.shuffleOff).show(), a(this.cssSelector.shuffle).hide()) : (a(this.cssSelector.shuffleOff).hide(), a(this.cssSelector.shuffle).show()))
    },
    _highlight: function (c) {
      this.playlist.length && c !== b && (a(this.cssSelector.playlist + " .jp-playlist-current").removeClass("jp-playlist-current"), a(this.cssSelector.playlist + " li:nth-child(" + (c + 1) + ")").addClass("jp-playlist-current").find(".jp-playlist-item").addClass("jp-playlist-current"))
    },
    setPlaylist: function (a) {
      this._initPlaylist(a), this._init()
    },
    add: function (b, c) {
      a(this.cssSelector.playlist + " ul").append(this._createListItem(b)).find("li:last-child").hide().slideDown(this.options.playlistOptions.addTime), this._updateControls(), this.original.push(b), this.playlist.push(b), c ? this.play(this.playlist.length - 1) : 1 === this.original.length && this.select(0)
    },
    remove: function (c) {
      var d = this;
      return c === b ? (this._initPlaylist([]), this._refresh(function () {
        a(d.cssSelector.jPlayer).jPlayer("clearMedia")
      }), !0) : this.removing ? !1 : (c = 0 > c ? d.original.length + c : c, c >= 0 && c < this.playlist.length && (this.removing = !0, a(this.cssSelector.playlist + " li:nth-child(" + (c + 1) + ")").slideUp(this.options.playlistOptions.removeTime, function () {
        if (a(this).remove(), d.shuffled) {
          var b = d.playlist[c];
          a.each(d.original, function (a) {
            return d.original[a] === b ? (d.original.splice(a, 1), !1) : void 0
          }), d.playlist.splice(c, 1)
        } else d.original.splice(c, 1), d.playlist.splice(c, 1);
        d.original.length ? c === d.current ? (d.current = c < d.original.length ? d.current : d.original.length - 1, d.select(d.current)) : c < d.current && d.current-- : (a(d.cssSelector.jPlayer).jPlayer("clearMedia"), d.current = 0, d.shuffled = !1, d._updateControls()), d.removing = !1
      })), !0)
    },
    select: function (b) {
      b = 0 > b ? this.original.length + b : b, b >= 0 && b < this.playlist.length ? (this.current = b, this._highlight(b), a(this.cssSelector.jPlayer).jPlayer("setMedia", this.playlist[this.current])) : this.current = 0
    },
    play: function (c) {
      c = 0 > c ? this.original.length + c : c, c >= 0 && c < this.playlist.length ? this.playlist.length && (this.select(c), a(this.cssSelector.jPlayer).jPlayer("play")) : c === b && a(this.cssSelector.jPlayer).jPlayer("play")
    },
    pause: function () {
      a(this.cssSelector.jPlayer).jPlayer("pause")
    },
    next: function () {
      var a = this.current + 1 < this.playlist.length ? this.current + 1 : 0;
      this.loop ? 0 === a && this.shuffled && this.options.playlistOptions.shuffleOnLoop && this.playlist.length > 1 ? this.shuffle(!0, !0) : this.play(a) : a > 0 && this.play(a)
    },
    previous: function () {
      var a = this.current - 1 >= 0 ? this.current - 1 : this.playlist.length - 1;
      (this.loop && this.options.playlistOptions.loopOnPrevious || a < this.playlist.length - 1) && this.play(a)
    },
    shuffle: function (c, d) {
      var e = this;
      c === b && (c = !this.shuffled), (c || c !== this.shuffled) && a(this.cssSelector.playlist + " ul").slideUp(this.options.playlistOptions.shuffleTime, function () {
        e.shuffled = c, c ? e.playlist.sort(function () {
          return .5 - Math.random()
        }) : e._originalPlaylist(), e._refresh(!0), d || !a(e.cssSelector.jPlayer).data("jPlayer").status.paused ? e.play(0) : e.select(0), a(this).slideDown(e.options.playlistOptions.shuffleTime)
      })
    },
    blur: function (b) {
      a(this.cssSelector.jPlayer).jPlayer("option", "autoBlur") && a(b).blur()
    }
  }
}(jQuery);
